package org.springframework.beans.factory.support;

import org.springframework.beans.BeansException;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;

/**
 * @Name AbstractBeanDefinitionReader
 * @Description: 读取 BeanDefinition 信息的抽象 [实现] 类
 * 描述信息： 读取 BeanDefinition 信息。
 * 扩展：
 * - 拥有 ResourceLoader 和 BeanDefinitionRegistry 两个属性。
 * - 新增了设置 ResourceLoader 的功能。
 * 目的：通过 ResourceLoader 资源加载器读取 Bean 配置文件，解析出 BeanDefinition 信息，然后注册到 Bean 容器中。
 * @Version v1.0.0
 * @Author: lichao
 * @Date: 2024-03-15 17:31:48
 **/
public abstract class AbstractBeanDefinitionReader implements BeanDefinitionReader {
    private ResourceLoader resourceLoader;
    private final BeanDefinitionRegistry registry;

    public AbstractBeanDefinitionReader(BeanDefinitionRegistry registry) {
        this(registry, new DefaultResourceLoader());
    }

    public AbstractBeanDefinitionReader(BeanDefinitionRegistry registry, ResourceLoader resourceLoader) {
        this.registry = registry;
        this.resourceLoader = resourceLoader;
    }

    @Override
    public BeanDefinitionRegistry getBeanDefinitionRegistry() {
        return registry;
    }

    @Override
    public ResourceLoader getResourceLoader() {
        return resourceLoader;
    }

    public void setResourceLoader(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
    }

    @Override
    public void loadBeanDefinitions(String[] locations) throws BeansException {
        for (String location : locations) {
            loadBeanDefinitions(location);
        }
    }
}

